#ifndef CLASSE_H
#define CLASSE_H

#include <iostream>
#include <vector>
#include "debugstreams.h"
#include "lib.h"
using namespace std;

class Classe
{
 protected:
  static string Caracteristiques[6];
  unsigned int Niveau, Niveau_mag, Traits[7];
  unsigned int XP;
  string Type_classe;
  vector<unsigned int> Comp_classe;
  TypeClasse TC;
  vector<Sort> Cl_sorts;
  static DebugLevelType elementaire;
  static DebugLevelType fonction;
 public:

  Classe();
  Classe(unsigned int xp, unsigned int trait[7], TypeClasse tc);
  Classe(const Classe& classe);
  virtual ~Classe();
  void set_Competences(const vector<unsigned int> capa);
  void affiche() const;
  virtual void calcul_niveau() = 0;
  virtual void afficher_stats() = 0;
  void affiche_competences() const;
  string get_classe() const;
  unsigned int get_XP() const;
  unsigned int get_trait(const unsigned int& i) const;
  unsigned int get_combien() const;
  unsigned int get_comp(const unsigned int& i) const;
  virtual void appliquer_modif(const string& type) = 0;
  virtual void augmenter_talents(const unsigned int& bonus,
				 const bool& lvl_up) = 0;
  virtual void get_JS(unsigned int *tab) const = 0;
  virtual string get_competence(const unsigned int& i) const = 0;
  unsigned int get_Niveau() const;
  virtual unsigned int calcule_TAc0() const = 0;
  virtual void calcul_niv_mag() = 0;
  virtual void ecrire_sorts(const string& nom_fichier, const bool& ecrase) const = 0;
  virtual void nbr_sort(unsigned int sorts[], const unsigned int& taille) const = 0;
  string supprime_accents(const string& brut) const;
  TypeClasse get_TC() const;
  void augmenter_xp(const unsigned int& xp);
  static void setLevel(const DebugLevelType& level, const unsigned int& n);
  virtual void ajout_sorts();
  void set_Sorts(const vector<Sort>& sorts);
  unsigned int get_combien_sorts() const;
  Sort get_sort(const unsigned int& i) const;
};


#endif
